﻿#define _CRT_SECURE_NO_WARNINGS 1
//左移操作符
//移位规则：左边抛弃、右边补0
//00000000000000000000000000001010
//00000000000000000000000000010100
//#include <stdio.h>
//int main()
//{
//	int num = 10;
//	int n = num << 1;
//	printf("n= %d\n", n);
//	printf("num= %d\n", num);
//	return 0;
//}
// 
//右移操作符
//移位规则：⾸先右移运算分两种：
//1. 逻辑右移：左边⽤0填充，右边丢弃
// int = 1;
// 11111111111111111111111111111111
// 01111111111111111111111111111111
//
//2. 算术右移：左边⽤原该值的符号位填充，右边丢弃
// 11111111111111111111111111111111
// 11111111111111111111111111111111
//#include <stdio.h>
//int main()
//{
//	int num = 10;
//	int n = num >> 1;
//	printf("n= %d\n", n);
//	printf("num= %d\n", num);
//	return 0;
//}

//位操作符：& 、 | 、 ^ 、~
//#include <stdio.h>
//int main()
//{
//	int num1 = -3;
//	int num2 = 5;
//	printf("%d\n", num1 & num2);
//	printf("%d\n", num1 | num2);
//	printf("%d\n", num1 ^ num2);
//	printf("%d\n", ~0);
//	return 0;
//
//}

//不能创建临时变量（第三个变量），实现两个数的交换。
#include <stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("a = %d b = %d\n", a, b);
	return 0;
}